package csm.common;

import java.text.DecimalFormat;

//millisecond를 가지고 구하기
//long milliseconds;
//int seconds = (milliseconds/1000)%60;
//int minutes = (milliseconds/60000)%60;
//
//int hours = (milliseconds/3600000)%24;
//int days = milliseconds/(24*60*60*1000);

/**
 * <code>Null</code>값 검사 및 형변환 도구를 제공하는 클래스입니다.
 *
 * @author seungmun
 * @since 2006.1.18.
 */
public final class TypeConv
{
	private final static DecimalFormat decimalformat = new DecimalFormat();

	private TypeConv()
	{
	}

	/**
	 * <code>Millisecond</code>를 정수값의 초로 환산합니다.
	 *
	 * @param millisecond
	 * @return
	 */
	public static int ToIntSeconds(long millisecond)
	{
		int sec = ToInt((millisecond / 1000) % 60);
		return sec;
	}

	/**
	 * <code>Millisecond</code>를 초로 환산합니다.
	 *
	 * @param millisecond
	 * @return
	 */
	public static double ToSeconds(long millisecond)
	{
		return ToDouble(millisecond / 1000);
	}

	/**
	 * <code>Millisecond</code>를 정수값의 분으로 환산합니다.
	 *
	 * @param millisecond
	 * @return
	 */
	public static int ToIntMinutes(long millisecond)
	{
		return ToInt((millisecond / 60000) % 60);
	}

	/**
	 * <code>Millisecond</code>를 분으로 환산합니다.
	 *
	 * @param millisecond
	 * @return
	 */
	public static double ToMinutes(long millisecond)
	{
		return ToDouble(millisecond / 60000);
	}

	/**
	 * <code>Millisecond</code>를 정수값의 시간으로 환산합니다.
	 *
	 * @param millisecond
	 * @return
	 */
	public static int ToIntHours(long millisecond)
	{
		return ToInt((millisecond / 3600000) % 24);
	}

	/**
	 * <code>Millisecond</code>를 시간으로 환산합니다.
	 *
	 * @param millisecond
	 * @return
	 */
	public static double ToHours(long millisecond)
	{
		return ToDouble(millisecond / 3600000);
	}

	/**
	 * <code>Millisecond</code>를 정수값의 일수로 환산합니다.
	 *
	 * @param millisecond
	 * @return
	 */
	public static int ToIntDays(long millisecond)
	{
		return ToInt(millisecond / 86400000);
	}

	/**
	 * <code>Millisecond</code>를 일수로 환산합니다.
	 *
	 * @param millisecond
	 * @return
	 */
	public static double ToDays(long millisecond)
	{
		return ToDouble(millisecond / 86400000);
	}

	private static boolean checkNull(Object val)
	{
		return (val == null);
	}

	/**
	 * 문자열로 변환합니다.
	 *
	 * @param val
	 *            변환할 객체
	 * @return 문자열(객체가 <code>null</code>일 경우 "" 반환)
	 */
	public static String ToStr(Object val)
	{
		if (checkNull(val)) return StringUtil.EMPTY;
		return String.valueOf(val);
	}

	/**
	 * 문자열로 변환합니다.
	 *
	 * @param val
	 *            boolean value
	 * @return 문자열
	 */
	public static String ToStr(boolean val)
	{
		return String.valueOf(val);
	}

	/**
	 * <code>char</code>를 <code>String</code>으로 변환합니다.
	 *
	 * @param val
	 *            변환할 문자값.
	 * @return 문자열
	 */
	public static String ToStr(char val)
	{
		return String.valueOf(val);
	}

	/**
	 * <code>char[]</code>을 <code>String</code>으로 변환합니다.
	 *
	 * @param val
	 *            변환할 문자배열.
	 * @return 문자열
	 */
	public static String ToStr(char[] val)
	{
		return String.valueOf(val);
	}

	/**
	 * <code>int</code>를 <code>String</code>으로 변환합니다.
	 *
	 * @param val
	 *            변환할 <code>int</code>값.
	 * @return 문자열
	 */
	public static String ToStr(int val)
	{
		return String.valueOf(val);
	}

	/**
	 * <code>long</code>을 <code>String</code>으로 변환합니다.
	 *
	 * @param val
	 *            변환할 <code>Long</code>값.
	 * @return 문자열
	 */
	public static String ToStr(long val)
	{
		return String.valueOf(val);
	}

	/**
	 * <code>float</code>을 <code>String</code>으로 변환합니다.
	 *
	 * @param val
	 *            변환할 <code>float</code>값.
	 * @return 문자열
	 */
	public static String ToStr(float val)
	{
		return String.valueOf(val);
	}

	/**
	 * <code>double</code>를 <code>String</code>으로 변환합니다.
	 *
	 * @param val
	 *            변환할 <code>double</code>값.
	 * @return 문자열
	 */
	public static String ToStr(double val)
	{
		return String.valueOf(val);
	}

	/**
	 * 객체를 <code>int</code>값으로 변환합니다.
	 *
	 * @param val
	 *            변환할 객체.
	 * @return <code>int</code> 값(<code>null</code>일 경우 <code>0</code>을 반환합니다.)
	 */
	public static int ToInt(Object val)
	{
		return ToInt(ToStr(val));
	}

	/**
	 * String을 int값으로 변환합니다.
	 *
	 * @param val
	 *            변환할 문자열.
	 * @return int 값(공백이거나 null일경우 0을 반환합니다.)
	 */
	public static int ToInt(String val)
	{

		int rtnVal = 0;
		if (val == null) val = "";
		try
		{
			rtnVal = decimalformat.parse(val).intValue();
		}
		catch (Exception e)
		{
			rtnVal = 0;
		}
		return rtnVal;
	}

	/**
	 * long을 int값으로 변환합니다.
	 *
	 * @param val
	 *            변환할 long값.
	 * @return int 값
	 */
	public static int ToInt(long val)
	{
		Long oLong = new Long(val);
		return oLong.intValue();
	}

	/**
	 * float을 int값으로 변환합니다.
	 *
	 * @param val
	 *            변환할 float값.
	 * @return int 값
	 */
	public static int ToInt(float val)
	{
		Float oFloat = new Float(val);
		return oFloat.intValue();
	}

	/**
	 * double을 int값으로 변환합니다.
	 *
	 * @param val
	 *            변환할 double값.
	 * @return int 값
	 */
	public static int ToInt(double val)
	{
		Double oDouble = new Double(val);
		return oDouble.intValue();
	}

	/**
	 * 객체를 long값으로 변환합니다.
	 *
	 * @param val
	 *            변환할 객체.
	 * @return long 값(null일경우 0을 반환합니다.)
	 */
	public static long ToLong(Object val)
	{
		return ToLong(ToStr(val));
	}

	/**
	 * String을 long값으로 변환합니다.
	 *
	 * @param val
	 *            변환할 문자열.
	 * @return long 값(공백이거나 null일경우 0을 반환합니다.)
	 */
	public static long ToLong(String val)
	{
		long rtnVal = 0L;
		if (val == null) val = "";
		try
		{
			rtnVal = decimalformat.parse(val).longValue();
		}
		catch (Exception e)
		{
			rtnVal = 0L;
		}
		return rtnVal;
	}

	/**
	 * int를 long값으로 변환합니다.
	 *
	 * @param val
	 *            변환할 int값.
	 * @return long 값
	 */
	public static long ToLong(int val)
	{
		Integer oInteger = new Integer(val);
		return oInteger.longValue();
	}

	/**
	 * float을 long값으로 변환합니다.
	 *
	 * @param val
	 *            변환할 float값.
	 * @return long 값
	 */
	public static long ToLong(float val)
	{
		Float oFloat = new Float(val);
		return oFloat.longValue();
	}

	/**
	 * double을 long값으로 변환합니다.
	 *
	 * @param val
	 *            변환할 double값.
	 * @return long 값
	 */
	public static long ToLong(double val)
	{
		Double oDouble = new Double(val);
		return oDouble.longValue();
	}

	/**
	 * 객체를 float값으로 변환합니다.
	 *
	 * @param val
	 *            변환할 객체.
	 * @return float 값(null일경우 0을 반환합니다.)
	 */
	public static float ToFloat(Object val)
	{
		return ToFloat(ToStr(val));
	}

	/**
	 * String을 float값으로 변환합니다.
	 *
	 * @param val
	 *            변환할 문자열.
	 * @return float 값(공백이거나 null일경우 0을 반환합니다.)
	 */
	public static float ToFloat(String val)
	{
		float rtnVal = 0f;
		if (val == null) val = "";
		try
		{
			rtnVal = decimalformat.parse(val).floatValue();
		}
		catch (Exception e)
		{
			rtnVal = 0f;
		}
		return rtnVal;
	}

	/**
	 * int를 float값으로 변환합니다.
	 *
	 * @param val
	 *            변환할 int 값.
	 * @return float 값
	 */
	public static float ToFloat(int val)
	{
		Integer oInteger = new Integer(val);
		return oInteger.floatValue();
	}

	/**
	 * long을 float값으로 변환합니다.
	 *
	 * @param val
	 *            변환할 long 값.
	 * @return float 값
	 */
	public static float ToFloat(long val)
	{
		Long oLong = new Long(val);
		return oLong.floatValue();
	}

	/**
	 * double를 int값으로 변환합니다.
	 *
	 * @param val
	 *            변환할 double 값.
	 * @return float 값
	 */
	public static float ToFloat(double val)
	{
		Double oDouble = new Double(val);
		return oDouble.floatValue();
	}

	/**
	 * 객체를 int값으로 변환합니다.
	 *
	 * @param val
	 *            변환할 객체.
	 * @return double값.(null일경우 0.0을 반환합니다.)
	 */
	public static double ToDouble(Object val)
	{
		return ToDouble(ToStr(val));
	}

	/**
	 * String을 double값으로 변환합니다.
	 *
	 * @param val
	 *            변환할 문자열.
	 * @return double값.(공백이거나 null일경우 0.0을 반환합니다.)
	 */
	public static double ToDouble(String val)
	{
		double rtnVal = 0.0;
		if (val == null) val = "";
		try
		{
			rtnVal = decimalformat.parse(val).doubleValue();
		}
		catch (Exception e)
		{
			rtnVal = 0.0;
		}
		return rtnVal;
	}

	/**
	 * int를 double값으로 변환합니다.
	 *
	 * @param val
	 *            변환할 int값.
	 * @return double 값
	 */
	public static double ToDouble(int val)
	{
		Integer oInteger = new Integer(val);
		return oInteger.intValue();
	}

	/**
	 * long을 double값으로 변환합니다.
	 *
	 * @param val
	 *            변환할 long값.
	 * @return double 값
	 */
	public static double ToDouble(long val)
	{
		Long oLong = new Long(val);
		return oLong.doubleValue();
	}

	/**
	 * float을 double값으로 변환합니다.
	 *
	 * @param val
	 *            변환할 float값.
	 * @return double 값
	 */
	public static double ToDouble(float val)
	{
		Float oFloat = new Float(val);
		return oFloat.doubleValue();
	}
}
